<?php
/**

 *
 * CareyShop    管理组账号模型
 *
 * @author      Randy
 * @date        2020/9/9
 */

namespace app\admin\model;

use app\common\model\BaseModel;
use think\annotation\model\relation\HasOne;

/**
 * @property int|mixed $is_delete
 * @property mixed     $admin_id
 * @property mixed     $username
 * @property int|mixed $status
 * @property int|mixed $skill_level
 * @property int|mixed $is_can_service
 * @property int|mixed $password
 * @property mixed     $price
 * @property mixed     $sc
 * @property mixed     $service_period_id
 */
#[HasOne('store' ,Store::class , 'store_id' ,'store_id')]
class Admin extends BaseModel
{
    /**
     * 主键
     * @var string
     */
    protected $pk = 'admin_id';

    /**
     * 隐藏属性
     * @var array
     */
    protected $hidden = [
        'password',
        'is_delete',
    ];

    /**
     * 只读属性
     * @var array
     */
    protected $readonly = [
        'admin_id',
        'username',
    ];

    /**
     * 定义全局的查询范围
     * @var string[]
     */
    protected $globalScope = [
        'delete',
    ];

    /**
     * 全局是否删除查询条件
     * @access public
     * @param object $query 模型
     */
    public function scopeDelete($query)
    {
        $query->where('is_delete', '=', 0);
    }

    /**
     * 密码修改器
     * @access public
     * @param string $value 值
     * @return string
     */
    public function setPasswordAttr(string $value)
    {
        return md6($value);
    }


    /**
     * hasOne cs_auth_group
     * @access public
     * @return mixed
     */
    public function authGroup()
    {
        return $this
            ->hasOne(AdminAuthGroup::class, 'group_id', 'group_id');
    }

    /**
     * 关联查询NULL处理
     * @param mixed $value
     * @return \stdClass
     */
    public function getGetAuthGroupAttr($value)
    {
        return is_null($value) ? new \stdClass : $value;
    }

    /**
     * 验证当前账户是否有越级操作
     * @access private
     * @param null $adminID admin_id
     * @param null $data    外部数据
     * @return bool|false
     * @throws
     */
    private function checkAdminAuth($adminID = null, $data = null)
    {
        if (get_client_group() === AUTH_SUPER_ADMINISTRATOR) {
            return true;
        }

        if (!is_null($adminID)) {
            $result = $this->find($adminID);
            if (is_null($result)) {
                error_abort('账号不存在');
            }

            if (get_client_group() > $result->getAttr('group_id')) {
                error_abort('操作失败，您可能存在越级操作');
            }
        }

        if (!is_empty_parm($data['group_id'])) {
            if (get_client_group() > $data['group_id']) {
                error_abort('操作失败，您可能存在越级操作');
            }
        }

        return true;
    }

}
